﻿package frEngine.animateControler.transformControler
{
    import baseEngine.core.*;
    import baseEngine.modifiers.*;
    import flash.geom.*;
    import frEngine.animateControler.keyframe.*;
    import frEngine.math.*;

    public class ScaleXYZControler extends Modifier
    {

        public function ScaleXYZControler()
        {
            return;
        }// end function

        override protected function getBaseValue(param1:Pivot3D) : Object
        {
            return new Vector3D(param1.scaleX, param1.scaleY, param1.scaleZ);
        }// end function

        override public function get type() : int
        {
            return AnimateControlerType.ScaleXYZ;
        }// end function

        override protected function setTargetProperty(param1) : void
        {
            targetObject3d.setScale(param1.x, param1.y, param1.z);
            return;
        }// end function

        override protected function calculateFrameValue(param1:int) : void
        {
            var _loc_5:Vector3D = null;
            var _loc_6:NodeAnimateKey = null;
            var _loc_7:Number = NaN;
            var _loc_8:int = 0;
            var _loc_9:int = 0;
            var _loc_10:Boolean = false;
            var _loc_11:int = 0;
            var _loc_12:Number = NaN;
            var _loc_13:int = 0;
            var _loc_14:Number = NaN;
            var _loc_15:Number = NaN;
            var _loc_2:* = getTimeIndex(param1, _keyframes);
            var _loc_3:* = _keyframes[_loc_2];
            var _loc_4:* = _loc_3.value;
            if (_loc_3.frame == param1 || _loc_2 == (_keyframes.length - 1))
            {
                _loc_5 = new Vector3D(_loc_4 + _baseValue.x, _loc_4 + _baseValue.y, _loc_4 + _baseValue.z);
                _cache[param1] = _loc_5;
                var _loc_16:Number = 0.0001;
                _loc_5.x = 0.0001;
                var _loc_16:Number = 0.0001;
                _loc_5.y = 0.0001;
                var _loc_16:Number = 0.0001;
                _loc_5.z = 0.0001;
            }
            else
            {
                _loc_6 = _keyframes[(_loc_2 + 1)];
                _loc_7 = _loc_6.value;
                _loc_8 = _loc_3.frame;
                _loc_9 = _loc_6.frame;
                _loc_10 = _loc_3.bezierVo.isLineTween || _loc_6.bezierVo.isLineTween;
                _loc_11 = param1 + 2 + int(Math.random() * 30);
                var _loc_16:* = _loc_9;
                _loc_11 = _loc_9;
                if (_loc_10)
                {
                    _loc_14 = _loc_3.value;
                    _loc_15 = (_loc_6.value - _loc_14) / (_loc_9 - _loc_8);
                    _loc_13 = param1;
                    while (_loc_13 < _loc_11)
                    {
                        
                        if (!_cache[_loc_13])
                        {
                            _loc_12 = _loc_14 + (_loc_13 - _loc_8) * _loc_15;
                            _loc_5 = new Vector3D(_loc_12 + _baseValue.x, _loc_12 + _baseValue.y, _loc_12 + _baseValue.z);
                            _cache[_loc_13] = _loc_5;
                            var _loc_16:Number = 0.0001;
                            _loc_5.x = 0.0001;
                            var _loc_16:Number = 0.0001;
                            _loc_5.y = 0.0001;
                            var _loc_16:Number = 0.0001;
                            _loc_5.z = 0.0001;
                        }
                        _loc_13++;
                    }
                }
                else
                {
                    NumberUtil.getBezierData(_loc_8, _loc_9, _loc_8 + _loc_3.bezierVo.RX, _loc_9 + _loc_6.bezierVo.LX, vectorX);
                    NumberUtil.getBezierData(_loc_3.value, _loc_6.value, _loc_3.value + _loc_3.bezierVo.RY, _loc_6.value + _loc_6.bezierVo.LY, vectorY);
                    _loc_13 = param1;
                    while (_loc_13 < _loc_11)
                    {
                        
                        if (!_cache[_loc_13])
                        {
                            _loc_12 = NumberUtil.getBezierTimeAndValue(_loc_13, vectorX, vectorY);
                            _loc_5 = new Vector3D(_loc_12 + _baseValue.x, _loc_12 + _baseValue.y, _loc_12 + _baseValue.z);
                            _cache[_loc_13] = _loc_5;
                            var _loc_16:Number = 0.0001;
                            _loc_5.x = 0.0001;
                            var _loc_16:Number = 0.0001;
                            _loc_5.y = 0.0001;
                            var _loc_16:Number = 0.0001;
                            _loc_5.z = 0.0001;
                        }
                        _loc_13++;
                    }
                }
            }
            return;
        }// end function

    }
}
